package com.stellar.circle.domain.sChatRelationship;

import com.stellar.circle.controller.admin.sChatRelationship.vo.*;
import com.stellar.web.core.bean.PageResult;

import java.util.List;

/**
 * 用户聊天关系表领域服务接口
 *
 * @author Jqchan
 * @version 1.0
 * @date 2025-06-12 21:21:37
 */
public interface SChatRelationshipDomainService {

    /**
     * 分页查询
     *
     * @param requestPageVO 分页查询参数
     * @return 分页结果
     */
    PageResult<SChatRelationshipResponseVO> page(SChatRelationshipRequestPageVO requestPageVO);

    /**
     * 更新数据
     *
     * @param requestVO 更新参数
     * @return 是否成功
     */
    Boolean update(SChatRelationshipRequestVO requestVO);

    /**
     * 删除数据
     *
     * @param id 主键ID
     * @return 是否成功
     */
    Boolean delete(Long id);

    /**
     * 新增数据
     *
     * @param requestVO 新增参数
     * @return 是否成功
     */
    Boolean insert(SChatRelationshipRequestVO requestVO);

    /**
     * 根据主键获取详情
     *
     * @param id 主键ID
     * @return 详情数据
     */
    SChatRelationshipResponseVO get(Long id);

    /**
     * 添加好友关系
     *
     * @param userId   用户ID
     * @param friendId 好友ID
     * @return
     */
    Boolean addFriend(Long userId, Long friendId);

    /**
     * 删除好友关系
     *
     * @param userId
     * @param friendId
     * @return
     */
    Boolean deleteFriend(Long userId, Long friendId);

    /**
     * 拉黑/解除拉黑好友
     *
     * @param userId   用户ID
     * @param friendId 被拉黑的用户ID
     * @return
     */
    Boolean blockOrUnblock(Long userId, Long friendId);

    /**
     * 查询用户的聊天关系列表
     *
     * @param userId
     * @return
     */
    List<SChatRelationshipResponseVO> list(Long userId);

    /**
     * 检查是否被拉黑
     *
     * @param userId
     * @param receiverId
     * @return
     */
    Boolean isBlocked(Long userId, Long receiverId);

    /**
     * 获取关注和粉丝数量
     *
     * @param userId
     * @return
     */
    SChatRelationshipResponseVO getFollowAndFansCount(Long userId);
}
